//pretested
#pragma once

template<int N=1>
struct listnode
{
    void* mark[N];
    listnode<N>* next;
    listnode<N>* pre;
};

struct SINGLELISTNODE
{
    void* mark;
    struct SINGLELISTNODE* next;
};




typedef struct SINGLELISTNODE slnode;
template<int N>
listnode<N>* MakeListNode(listnode<N>* newnode,void* mark);
template<int N>
void UpListNode(listnode<N>* tnode);
template<int N>
void InsertListNode(listnode<N>* list,listnode<N>* tnode);
template<int N>
void CombineList(listnode<N>* first,listnode<N>* second);
template<int N>
void RemoveListNode(listnode<N>* tnode);

slnode* MakeSListNode(slnode* newnode,void* mark);
void InsertSListNode(slnode* list,slnode* tnode);
void CombineSList(slnode* first,slnode* second);
int RemoveSListNode(slnode* from,slnode* tnode);
